<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>My Project: HttpAppFramework.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">My Project
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">载入中...</div>
<div class="SRStatus" id="Searching">搜索中...</div>
<div class="SRStatus" id="NoMatches">未找到</div>
</div>
</div>
</div>
</div>

<div class="header">
  <div class="headertitle"><div class="title">HttpAppFramework.h</div></div>
</div><!--header-->
<div class="contents">
<a href="HttpAppFramework_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="preprocessor">#ifdef __cpp_impl_coroutine</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="preprocessor">#include &lt;drogon/utils/coroutine.h&gt;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="preprocessor">#include &lt;<a class="code" href="exports_8h.html">drogon/exports.h</a>&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#include &lt;drogon/utils/HttpConstraint.h&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#include &lt;<a class="code" href="CacheMap_8h.html">drogon/CacheMap.h</a>&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="preprocessor">#include &lt;<a class="code" href="DrObject_8h.html">drogon/DrObject.h</a>&gt;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;<a class="code" href="HttpBinder_8h.html">drogon/HttpBinder.h</a>&gt;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &lt;<a class="code" href="HttpFilter_8h.html">drogon/HttpFilter.h</a>&gt;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;<a class="code" href="MultiPart_8h.html">drogon/MultiPart.h</a>&gt;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;<a class="code" href="NotFound_8h.html">drogon/NotFound.h</a>&gt;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &lt;<a class="code" href="drogon__callbacks_8h.html">drogon/drogon_callbacks.h</a>&gt;</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#include &lt;drogon/utils/Utilities.h&gt;</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="preprocessor">#include &lt;drogon/plugins/Plugin.h&gt;</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="preprocessor">#include &lt;<a class="code" href="HttpRequest_8h.html">drogon/HttpRequest.h</a>&gt;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="preprocessor">#include &lt;<a class="code" href="HttpResponse_8h.html">drogon/HttpResponse.h</a>&gt;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="preprocessor">#include &lt;drogon/orm/DbClient.h&gt;</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="preprocessor">#include &lt;drogon/orm/DbConfig.h&gt;</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="preprocessor">#include &lt;drogon/nosql/RedisClient.h&gt;</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span><span class="preprocessor">#include &lt;<a class="code" href="Cookie_8h.html">drogon/Cookie.h</a>&gt;</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="preprocessor">#include &lt;trantor/net/Resolver.h&gt;</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="preprocessor">#include &lt;trantor/net/EventLoop.h&gt;</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="preprocessor">#include &lt;trantor/utils/NonCopyable.h&gt;</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span><span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span><span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span><span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="preprocessor">#if defined(__APPLE__) &amp;&amp; defined(__MACH__) &amp;&amp; \</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="preprocessor">    (defined(__ENVIRONMENT_IPHONE_OS__) ||     \</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="preprocessor">     defined(__IPHONE_OS_VERSION_MIN_REQUIRED))</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment">// iOS</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="preprocessor">#define TARGET_OS_IOS 1</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="comment">// not iOS</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="HttpAppFramework_8h.html#a0c7ce500250128a8c356f91a6eafad96">   53</a></span><span class="preprocessor">#define TARGET_OS_IOS 0</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedrogon.html">drogon</a></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>{</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span><span class="comment">// the drogon banner</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="namespacedrogon.html#a78af765d8853619efb4051f2ac281083">   59</a></span><span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="namespacedrogon.html#a78af765d8853619efb4051f2ac281083">banner</a>[] =</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    <span class="stringliteral">&quot;     _                             \n&quot;</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    <span class="stringliteral">&quot;  __| |_ __ ___   __ _  ___  _ __  \n&quot;</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>    <span class="stringliteral">&quot; / _` | &#39;__/ _ \\ / _` |/ _ \\| &#39;_ \\ \n&quot;</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>    <span class="stringliteral">&quot;| (_| | | | (_) | (_| | (_) | | | |\n&quot;</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>    <span class="stringliteral">&quot; \\__,_|_|  \\___/ \\__, |\\___/|_| |_|\n&quot;</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>    <span class="stringliteral">&quot;                 |___/             \n&quot;</span>;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span> </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="namespacedrogon.html#a708ae7b30d3ff085747eff94d16ce572">   67</a></span><a class="code hl_define" href="exports_8h.html#a00d0a001c2dd03906272e00b0598182e">DROGON_EXPORT</a> std::string <a class="code hl_function" href="namespacedrogon.html#a708ae7b30d3ff085747eff94d16ce572">getVersion</a>();</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="namespacedrogon.html#ae4905bf6e3e832d66d9ee8b054204bd8">   68</a></span><a class="code hl_define" href="exports_8h.html#a00d0a001c2dd03906272e00b0598182e">DROGON_EXPORT</a> std::string <a class="code hl_function" href="namespacedrogon.html#ae4905bf6e3e832d66d9ee8b054204bd8">getGitCommit</a>();</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span><span class="keyword">class </span><a class="code hl_class" href="classdrogon_1_1HttpControllerBase.html">HttpControllerBase</a>;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span><span class="keyword">class </span><a class="code hl_class" href="classdrogon_1_1HttpSimpleControllerBase.html">HttpSimpleControllerBase</a>;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span><span class="keyword">class </span><a class="code hl_class" href="classdrogon_1_1WebSocketControllerBase.html">WebSocketControllerBase</a>;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">   73</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> =</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    std::function&lt;void(<span class="keyword">const</span> std::exception &amp;,</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>                       <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>                       std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&amp;)&gt;;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">   77</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">DefaultHandler</a> =</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>    std::function&lt;void(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>                       std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&amp;)&gt;;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="namespacedrogon.html#ac65852c981ca5bcf94811a26881bbc00">   80</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacedrogon.html#ac65852c981ca5bcf94811a26881bbc00">HttpHandlerInfo</a> = std::tuple&lt;std::string, HttpMethod, std::string&gt;;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span> </div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="preprocessor">#ifdef __cpp_impl_coroutine</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="keyword">class </span><a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span><span class="keyword">namespace </span>internal</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>{</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span><span class="keyword">struct </span>[[nodiscard]] ForwardAwaiter</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>    : <span class="keyword">public</span> CallbackAwaiter&lt;drogon::HttpResponsePtr&gt;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>{</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  <span class="keyword">public</span>:</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>    ForwardAwaiter(<a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">drogon::HttpRequestPtr</a> &amp;&amp;req,</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>                   std::string &amp;&amp;host,</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>                   <span class="keywordtype">double</span> timeout,</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>                   <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;app)</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>        : req_(std::move(req)),</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>          host_(std::move(host)),</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>          timeout_(timeout),</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>          app_(<a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>)</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>    {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>    }</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>    <span class="keywordtype">void</span> await_suspend(std::coroutine_handle&lt;&gt; handle) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  <span class="keyword">private</span>:</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>    <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">drogon::HttpRequestPtr</a> req_;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>    std::string host_;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>    <span class="keywordtype">double</span> timeout_;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>    HttpAppFramework &amp;app_;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>};</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>}  <span class="comment">// namespace internal</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span><span class="preprocessor">#endif</span></div>
<div class="foldopen" id="foldopen00112" data-start="{" data-end="};">
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html">  112</a></span><span class="keyword">class </span><a class="code hl_define" href="exports_8h.html#a00d0a001c2dd03906272e00b0598182e">DROGON_EXPORT</a> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> : <span class="keyword">public</span> trantor::NonCopyable</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>{</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  <span class="keyword">public</span>:</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#afa6c803364316d97d80ec34e19cc69a0">  115</a></span>    <span class="keyword">virtual</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#afa6c803364316d97d80ec34e19cc69a0">~HttpAppFramework</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae">  123</a></span>    <span class="keyword">static</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae">instance</a>();</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e">  132</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e">run</a>() = 0;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa962f3f0471d61293175b49fe9c46145">  135</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa962f3f0471d61293175b49fe9c46145">isRunning</a>() = 0;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276">  148</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276">quit</a>() = 0;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#af82887957c3f04200ac23d7f8add9128">  158</a></span>    <span class="keyword">virtual</span> trantor::EventLoop *<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#af82887957c3f04200ac23d7f8add9128">getLoop</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a9fa6352150ac9d3a76b621a2abdc2774">  168</a></span>    <span class="keyword">virtual</span> trantor::EventLoop *<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a9fa6352150ac9d3a76b621a2abdc2774">getIOLoop</a>(<span class="keywordtype">size_t</span> <span class="keywordtype">id</span>) <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4c6d63f9e8ea38d19cf220cca04eca52">  178</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4c6d63f9e8ea38d19cf220cca04eca52">setCustom404Page</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;resp,</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>                                               <span class="keywordtype">bool</span> set404 = <span class="keyword">true</span>) = 0;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a097b900f53bc40913d8688e5e6abaf58">  186</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a097b900f53bc40913d8688e5e6abaf58">setCustomErrorHandler</a>(</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>        std::function&lt;<a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="code hl_enumeration" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>,</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>                                      <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>            &amp;&amp;resp_generator) = 0;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span> </div>
<div class="foldopen" id="foldopen00191" data-start="{" data-end="}">
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a33e3d404b2b91723397e6c2861e7c7fc">  191</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a33e3d404b2b91723397e6c2861e7c7fc">setCustomErrorHandler</a>(</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>        std::function&lt;<a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="code hl_enumeration" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>)&gt; &amp;&amp;resp_generator)</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>    {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>        <span class="keywordflow">return</span> setCustomErrorHandler(</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>            [cb = std::move(resp_generator)](<a class="code hl_enumeration" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a> code,</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>                                             <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;) {</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>                <span class="keywordflow">return</span> cb(code);</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>            });</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>    }</div>
</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span> </div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span> </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>    <span class="keyword">virtual</span> <span class="keyword">const</span> std::function&lt;<a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="code hl_enumeration" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>,</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>                                                <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt; &amp;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a86eee98f7daa1ce128abe211a524823f">  209</a></span>    <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a86eee98f7daa1ce128abe211a524823f">getCustomErrorHandler</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span> </div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00219" data-start="{" data-end="}">
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae1cecfdedaef7e39556a396aaf2a1ab5">  219</a></span>    T *<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae1cecfdedaef7e39556a396aaf2a1ab5">getPlugin</a>()</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>    {</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>        <span class="keyword">static_assert</span>(IsPlugin&lt;T&gt;::value,</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>                      <span class="stringliteral">&quot;The Template parameter must be a subclass of &quot;</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>                      <span class="stringliteral">&quot;PluginBase&quot;</span>);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>        assert(isRunning());</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>        <span class="keyword">static</span> <span class="keyword">auto</span> pluginPtr =</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>            <span class="keyword">dynamic_cast&lt;</span>T *<span class="keyword">&gt;</span>(getPlugin(T::classTypeName()));</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>        <span class="keywordflow">return</span> pluginPtr;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>    }</div>
</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span> </div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00238" data-start="{" data-end="}">
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae149b3238aa0ab3b4be2e050f77769f0">  238</a></span>    std::shared_ptr&lt;T&gt; <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae149b3238aa0ab3b4be2e050f77769f0">getSharedPlugin</a>()</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>    {</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>        <span class="keyword">static_assert</span>(IsPlugin&lt;T&gt;::value,</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>                      <span class="stringliteral">&quot;The Template parameter must be a subclass of &quot;</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>                      <span class="stringliteral">&quot;PluginBase&quot;</span>);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>        assert(isRunning());</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>        <span class="keyword">static</span> <span class="keyword">auto</span> pluginPtr =</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>            std::dynamic_pointer_cast&lt;T&gt;(getSharedPlugin(T::classTypeName()));</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>        <span class="keywordflow">return</span> pluginPtr;</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>    }</div>
</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span> </div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a1c52cf207a40665d58529987b63db572">  258</a></span>    <span class="keyword">virtual</span> PluginBase *<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a1c52cf207a40665d58529987b63db572">getPlugin</a>(<span class="keyword">const</span> std::string &amp;name) = 0;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span> </div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4aaac51bddf4870ea90b36176673bcfd">  268</a></span>    <span class="keyword">virtual</span> std::shared_ptr&lt;PluginBase&gt; <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4aaac51bddf4870ea90b36176673bcfd">getSharedPlugin</a>(</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>        <span class="keyword">const</span> std::string &amp;name) = 0;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>    <span class="comment">/* The following is a series of methods of AOP */</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span> </div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span> </div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#af8bd65eb1d14e830a06fcbda24815dcd">  277</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#af8bd65eb1d14e830a06fcbda24815dcd">registerBeginningAdvice</a>(</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>()&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span> </div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span> </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a56400ea928b04fa063aec0296bc2a4d7">  288</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a56400ea928b04fa063aec0296bc2a4d7">registerNewConnectionAdvice</a>(</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">bool</span>(<span class="keyword">const</span> trantor::InetAddress &amp;,</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>                                 <span class="keyword">const</span> trantor::InetAddress &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span> </div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4f2096ccf94dd558ce1c5751783c0430">  303</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4f2096ccf94dd558ce1c5751783c0430">registerHttpResponseCreationAdvice</a>(</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4">  356</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4">registerSyncAdvice</a>(</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>        <span class="keyword">const</span> std::function&lt;<a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt;</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>            &amp;advice) = 0;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span> </div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span> </div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a7ccdc4847bcdf044c2d8cd884f176b9b">  367</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a7ccdc4847bcdf044c2d8cd884f176b9b">registerPreRoutingAdvice</a>(</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;,</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span> </div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span> </div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#abe544fdfd2e493efe64e2ebff637800d">  379</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#abe544fdfd2e493efe64e2ebff637800d">registerPreRoutingAdvice</a>(</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span> </div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span> </div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a67e7e6ced70a0f06d3b6ed67bceda81e">  389</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a67e7e6ced70a0f06d3b6ed67bceda81e">registerPostRoutingAdvice</a>(</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;,</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span> </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span> </div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a561bb2c79c7e50f25bf22e9d2dbed4c4">  401</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a561bb2c79c7e50f25bf22e9d2dbed4c4">registerPostRoutingAdvice</a>(</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno">  403</span> </div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span> </div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a0e430398838613d0275ccd25833cba54">  410</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a0e430398838613d0275ccd25833cba54">registerPreHandlingAdvice</a>(</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;,</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>                                 <a class="code hl_typedef" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span> </div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span> </div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ac5d36ac393507bbe1c3efbd16ead94ca">  422</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ac5d36ac393507bbe1c3efbd16ead94ca">registerPreHandlingAdvice</a>(</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span> </div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aba2cdc1128b3e48d34119cd03c1f46b3">  430</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aba2cdc1128b3e48d34119cd03c1f46b3">registerPostHandlingAdvice</a>(</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span>                                 <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span> </div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a51de1aa2e007cd261435b0d8ad6c5b1d">  439</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a51de1aa2e007cd261435b0d8ad6c5b1d">registerPreSendingAdvice</a>(</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;,</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>                                 <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice) = 0;</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span> </div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span> </div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ab8617b790e684ba060b7847c795fe627">  452</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ab8617b790e684ba060b7847c795fe627">setupFileLogger</a>() = 0;</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span> </div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>    <span class="comment">/* End of AOP methods */</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span> </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span> </div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#af1a661c03db7e0ef419e22277246d2e5">  460</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#af1a661c03db7e0ef419e22277246d2e5">loadConfigFile</a>(</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span>        <span class="keyword">const</span> std::string &amp;fileName) <span class="keyword">noexcept</span>(<span class="keyword">false</span>) = 0;</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span> </div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span> </div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4b66acb61e3cb3cf00e012dc470699c5">  469</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4b66acb61e3cb3cf00e012dc470699c5">loadConfigJson</a>(<span class="keyword">const</span> Json::Value &amp;data) <span class="keyword">noexcept</span>(</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>        <span class="keyword">false</span>) = 0;</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span> </div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span> </div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae04fc03f2dffd836c0def92074397713">  479</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae04fc03f2dffd836c0def92074397713">loadConfigJson</a>(Json::Value &amp;&amp;data) <span class="keyword">noexcept</span>(</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>        <span class="keyword">false</span>) = 0;</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span> </div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span> </div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">  501</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">registerHttpSimpleController</a>(</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span>        <span class="keyword">const</span> std::string &amp;pathName,</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span>        <span class="keyword">const</span> std::string &amp;ctrlName,</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span>        <span class="keyword">const</span> std::vector&lt;internal::HttpConstraint&gt; &amp;constraints = {}) = 0;</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span> </div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span> </div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> FUNCTION&gt;</div>
<div class="foldopen" id="foldopen00535" data-start="{" data-end="}">
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">  535</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">registerHandler</a>(</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>        <span class="keyword">const</span> std::string &amp;pathPattern,</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>        FUNCTION &amp;&amp;function,</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>        <span class="keyword">const</span> std::vector&lt;internal::HttpConstraint&gt; &amp;constraints = {},</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span>        <span class="keyword">const</span> std::string &amp;handlerName = <span class="stringliteral">&quot;&quot;</span>)</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>    {</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>        LOG_TRACE &lt;&lt; <span class="stringliteral">&quot;pathPattern:&quot;</span> &lt;&lt; pathPattern;</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>        <span class="keyword">auto</span> binder = std::make_shared&lt;internal::HttpBinder&lt;FUNCTION&gt;&gt;(</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span>            std::forward&lt;FUNCTION&gt;(function));</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span> </div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span>        getLoop()-&gt;queueInLoop([binder]() { binder-&gt;createHandlerInstance(); });</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span> </div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>        std::vector&lt;HttpMethod&gt; validMethods;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>        std::vector&lt;std::string&gt; middlewares;</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>        <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp;constraint : constraints)</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>        {</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span>            <span class="keywordflow">if</span> (constraint.type() == internal::ConstraintType::HttpMiddleware)</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span>            {</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>                middlewares.push_back(constraint.getMiddlewareName());</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span>            }</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (constraint.type() == internal::ConstraintType::HttpMethod)</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>            {</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>                validMethods.push_back(constraint.getHttpMethod());</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>            }</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>            {</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span>                LOG_ERROR &lt;&lt; <span class="stringliteral">&quot;Invalid controller constraint type&quot;</span>;</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span>                exit(1);</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span>            }</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>        }</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>        registerHttpController(</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span>            pathPattern, binder, validMethods, middlewares, handlerName);</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>    }</div>
</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span> </div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> FUNCTION&gt;</div>
<div class="foldopen" id="foldopen00586" data-start="{" data-end="}">
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a544b6539c7ffebce6c73f963502c6c99">  586</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a544b6539c7ffebce6c73f963502c6c99">registerHandlerViaRegex</a>(</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>        <span class="keyword">const</span> std::string &amp;regExp,</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>        FUNCTION &amp;&amp;function,</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>        <span class="keyword">const</span> std::vector&lt;internal::HttpConstraint&gt; &amp;constraints = {},</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span>        <span class="keyword">const</span> std::string &amp;handlerName = <span class="stringliteral">&quot;&quot;</span>)</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>    {</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span>        LOG_TRACE &lt;&lt; <span class="stringliteral">&quot;regex:&quot;</span> &lt;&lt; regExp;</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>        <a class="code hl_typedef" href="namespacedrogon_1_1internal.html#a05ac521c8734eacff04441e10c4caa2a">internal::HttpBinderBasePtr</a> binder;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span> </div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>        binder = std::make_shared&lt;internal::HttpBinder&lt;FUNCTION&gt;&gt;(</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>            std::forward&lt;FUNCTION&gt;(function));</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span> </div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>        std::vector&lt;HttpMethod&gt; validMethods;</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span>        std::vector&lt;std::string&gt; middlewares;</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>        <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp;constraint : constraints)</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>        {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span>            <span class="keywordflow">if</span> (constraint.type() == internal::ConstraintType::HttpMiddleware)</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>            {</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>                middlewares.push_back(constraint.getMiddlewareName());</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span>            }</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (constraint.type() == internal::ConstraintType::HttpMethod)</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>            {</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span>                validMethods.push_back(constraint.getHttpMethod());</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span>            }</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span>            {</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span>                LOG_ERROR &lt;&lt; <span class="stringliteral">&quot;Invalid controller constraint type&quot;</span>;</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span>                exit(1);</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span>            }</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span>        }</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span>        registerHttpControllerViaRegex(</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span>            regExp, binder, validMethods, middlewares, handlerName);</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span>        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno">  619</span>    }</div>
</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span> </div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span> </div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a194c7c36502fdd6bc23a033ca2fa4cec">  626</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a194c7c36502fdd6bc23a033ca2fa4cec">registerWebSocketController</a>(</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>        <span class="keyword">const</span> std::string &amp;pathName,</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>        <span class="keyword">const</span> std::string &amp;ctrlName,</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>        <span class="keyword">const</span> std::vector&lt;internal::HttpConstraint&gt; &amp;constraints = {}) = 0;</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span> </div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span> </div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#add1ce3a3afbd29df586bab2a7f540819">  637</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#add1ce3a3afbd29df586bab2a7f540819">registerWebSocketControllerRegex</a>(</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>        <span class="keyword">const</span> std::string &amp;regExp,</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span>        <span class="keyword">const</span> std::string &amp;ctrlName,</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span>        <span class="keyword">const</span> std::vector&lt;internal::HttpConstraint&gt; &amp;constraints =</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span>            std::vector&lt;internal::HttpConstraint&gt;{}) = 0;</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span> </div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span> </div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno">  671</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00672" data-start="{" data-end="}">
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">  672</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">registerController</a>(<span class="keyword">const</span> std::shared_ptr&lt;T&gt; &amp;ctrlPtr)</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno">  673</span>    {</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span>        <span class="keyword">static_assert</span>((std::is_base_of&lt;HttpControllerBase, T&gt;::value ||</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span>                       std::is_base_of&lt;HttpSimpleControllerBase, T&gt;::value ||</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span>                       std::is_base_of&lt;WebSocketControllerBase, T&gt;::value),</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span>                      <span class="stringliteral">&quot;Error! Only controller objects can be registered here&quot;</span>);</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span>        <span class="keyword">static_assert</span>(!T::isAutoCreation,</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span>                      <span class="stringliteral">&quot;Controllers created and initialized &quot;</span></div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno">  680</span>                      <span class="stringliteral">&quot;automatically by drogon cannot be &quot;</span></div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span>                      <span class="stringliteral">&quot;registered here&quot;</span>);</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span>        DrClassMap::setSingleInstance(ctrlPtr);</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>        T::initPathRouting();</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span>        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span>    }</div>
</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span> </div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span> </div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00692" data-start="{" data-end="}">
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a7eb8c7537a3321e5221616400337f781">  692</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a7eb8c7537a3321e5221616400337f781">registerFilter</a>(<span class="keyword">const</span> std::shared_ptr&lt;T&gt; &amp;filterPtr)</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>    {</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span>        <span class="keyword">static_assert</span>(std::is_base_of&lt;HttpFilterBase, T&gt;::value,</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span>                      <span class="stringliteral">&quot;Error! Only filter objects can be registered here&quot;</span>);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span>        <span class="keyword">static_assert</span>(!T::isAutoCreation,</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span>                      <span class="stringliteral">&quot;Filters created and initialized &quot;</span></div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno">  698</span>                      <span class="stringliteral">&quot;automatically by drogon cannot be &quot;</span></div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span>                      <span class="stringliteral">&quot;registered here&quot;</span>);</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno">  700</span>        DrClassMap::setSingleInstance(filterPtr);</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span>        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno">  702</span>    }</div>
</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno">  703</span> </div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00709" data-start="{" data-end="}">
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a5ceb03d8c45fab4f83b5d273cef8123e">  709</a></span>    <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a5ceb03d8c45fab4f83b5d273cef8123e">registerMiddleware</a>(</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno">  710</span>        <span class="keyword">const</span> std::shared_ptr&lt;T&gt; &amp;middlewarePtr)</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno">  711</span>    {</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno">  712</span>        <span class="keyword">static_assert</span>(std::is_base_of&lt;HttpMiddlewareBase, T&gt;::value,</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno">  713</span>                      <span class="stringliteral">&quot;Error! Only middleware objects can be registered here&quot;</span>);</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno">  714</span>        <span class="keyword">static_assert</span>(!T::isAutoCreation,</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno">  715</span>                      <span class="stringliteral">&quot;Middleware created and initialized &quot;</span></div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno">  716</span>                      <span class="stringliteral">&quot;automatically by drogon cannot be &quot;</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno">  717</span>                      <span class="stringliteral">&quot;registered here&quot;</span>);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span>        DrClassMap::setSingleInstance(middlewarePtr);</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno">  719</span>        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno">  720</span>    }</div>
</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno">  721</span> </div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span> </div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ade1a5ac01daf0fa3e0ca3ac61d71761b">  730</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ade1a5ac01daf0fa3e0ca3ac61d71761b">setDefaultHandler</a>(<a class="code hl_typedef" href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">DefaultHandler</a> handler) = 0;</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno">  731</span> </div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno">  733</span> </div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad8b119392d525e5825906ff254cb1cc7">  760</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad8b119392d525e5825906ff254cb1cc7">forward</a>(</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno">  761</span>        <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req,</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span>        std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&amp;callback,</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span>        <span class="keyword">const</span> std::string &amp;hostString = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span>        <span class="keywordtype">double</span> timeout = 0) = 0;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span><span class="preprocessor">#ifdef __cpp_impl_coroutine</span></div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span>    internal::ForwardAwaiter forwardCoro(<a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> req,</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>                                         std::string hostString = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span>                                         <span class="keywordtype">double</span> timeout = 0)</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span>    {</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span>        <span class="keywordflow">return</span> internal::ForwardAwaiter(std::move(req),</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span>                                        std::move(hostString),</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span>                                        timeout,</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span>                                        *<span class="keyword">this</span>);</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span>    }</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span> </div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aac447a3eab0f894d546b585ee8a87d76">  787</a></span>    <span class="keyword">virtual</span> std::vector&lt;HttpHandlerInfo&gt; <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aac447a3eab0f894d546b585ee8a87d76">getHandlersInfo</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span> </div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a6f4c83d2575453fe1efd60464431608c">  790</a></span>    <span class="keyword">virtual</span> <span class="keyword">const</span> Json::Value &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a6f4c83d2575453fe1efd60464431608c">getCustomConfig</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span> </div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a15cfc37d6c6e565ef38ec1a999dfd6e2">  802</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a15cfc37d6c6e565ef38ec1a999dfd6e2">setThreadNum</a>(<span class="keywordtype">size_t</span> threadNum) = 0;</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span> </div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#add0bde17d0a16461a43cee523030e453">  805</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#add0bde17d0a16461a43cee523030e453">getThreadNum</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span> </div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae7334018c6f5ab8c4c25b88744d3946d">  809</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae7334018c6f5ab8c4c25b88744d3946d">setSSLFiles</a>(<span class="keyword">const</span> std::string &amp;certPath,</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span>                                          <span class="keyword">const</span> std::string &amp;keyPath) = 0;</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span> </div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a81a7e3e6e3788aaa5a2ae342241efa9f">  815</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a81a7e3e6e3788aaa5a2ae342241efa9f">setSSLConfigCommands</a>(</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno">  816</span>        <span class="keyword">const</span> std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt;</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno">  817</span>            &amp;sslConfCmds) = 0;</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno">  818</span> </div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a6ce215269eff3565941a41f8fa5262f9">  826</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a6ce215269eff3565941a41f8fa5262f9">reloadSSLFiles</a>() = 0;</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno">  827</span> </div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno">  829</span> </div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a9f4430485256d7523177a371279a5d0e">  835</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a9f4430485256d7523177a371279a5d0e">addPlugins</a>(<span class="keyword">const</span> Json::Value &amp;configs) = 0;</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno">  836</span> </div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno">  838</span> </div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a20bdfc6b3d4dd364018fd4a342f42700">  843</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a20bdfc6b3d4dd364018fd4a342f42700">addPlugin</a>(<span class="keyword">const</span> std::string &amp;name,</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno">  844</span>                           <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;dependencies,</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno">  845</span>                           <span class="keyword">const</span> Json::Value &amp;config) = 0;</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno">  846</span> </div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno">  848</span> </div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae651c9500e50cb91495e09f39de0b124">  864</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae651c9500e50cb91495e09f39de0b124">addListener</a>(</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno">  865</span>        <span class="keyword">const</span> std::string &amp;ip,</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno">  866</span>        uint16_t port,</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno">  867</span>        <span class="keywordtype">bool</span> useSSL = <span class="keyword">false</span>,</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno">  868</span>        <span class="keyword">const</span> std::string &amp;certFile = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno">  869</span>        <span class="keyword">const</span> std::string &amp;keyFile = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno">  870</span>        <span class="keywordtype">bool</span> useOldTLS = <span class="keyword">false</span>,</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno">  871</span>        <span class="keyword">const</span> std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; &amp;sslConfCmds =</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno">  872</span>            {}) = 0;</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno">  873</span> </div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno">  875</span> </div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">  887</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">enableSession</a>(</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno">  888</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> timeout = 0,</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno">  889</span>        <a class="code hl_enumeration" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a> sameSite = Cookie::SameSite::kNull,</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno">  890</span>        <span class="keyword">const</span> std::string &amp;cookieKey = <span class="stringliteral">&quot;JSESSIONID&quot;</span>,</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno">  891</span>        <span class="keywordtype">int</span> maxAge = -1,</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno">  892</span>        std::function&lt;std::string()&gt; idGeneratorCallback = <span class="keyword">nullptr</span>) = 0;</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno">  893</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno">  895</span> </div>
<div class="foldopen" id="foldopen00902" data-start="{" data-end="}">
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a296351b980c11a6885448007298e4e61">  902</a></span>    <span class="keyword">inline</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a296351b980c11a6885448007298e4e61">enableSession</a>(</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno">  903</span>        <span class="keyword">const</span> std::chrono::duration&lt;double&gt; &amp;timeout,</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno">  904</span>        <a class="code hl_enumeration" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a> sameSite = Cookie::SameSite::kNull,</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno">  905</span>        <span class="keyword">const</span> std::string &amp;cookieKey = <span class="stringliteral">&quot;JSESSIONID&quot;</span>,</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno">  906</span>        <span class="keywordtype">int</span> maxAge = -1,</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno">  907</span>        std::function&lt;std::string()&gt; idGeneratorCallback = <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno">  908</span>    {</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno">  909</span>        <span class="keywordflow">return</span> enableSession((<span class="keywordtype">size_t</span>)timeout.count(),</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno">  910</span>                             sameSite,</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno">  911</span>                             cookieKey,</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno">  912</span>                             maxAge,</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno">  913</span>                             idGeneratorCallback);</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno">  914</span>    }</div>
</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno">  915</span> </div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno">  917</span> </div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a1d469f2033f6466ee445cdad67d3fb88">  920</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a1d469f2033f6466ee445cdad67d3fb88">registerSessionStartAdvice</a>(</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno">  921</span>        <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a7d7b482287e81a3b7d94a203b5d54b43">AdviceStartSessionCallback</a> &amp;advice) = 0;</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno">  922</span> </div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno">  924</span> </div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a68bae121605b64f6694f011471607ed2">  927</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a68bae121605b64f6694f011471607ed2">registerSessionDestroyAdvice</a>(</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno">  928</span>        <span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a4a6e4ad19b218191e589e6e665442c82">AdviceDestroySessionCallback</a> &amp;advice) = 0;</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno">  929</span> </div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno">  931</span> </div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8910690898d8e7e4fffb008da4e0a6d0">  935</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a8910690898d8e7e4fffb008da4e0a6d0">disableSession</a>() = 0;</div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno">  936</span> </div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno">  938</span> </div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a77371eb0a56cde3fe1301e2f3ef7f2b9">  942</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a77371eb0a56cde3fe1301e2f3ef7f2b9">setDocumentRoot</a>(<span class="keyword">const</span> std::string &amp;rootPath) = 0;</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno">  943</span> </div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a28278c2f408003c3c29064679be974e2">  945</a></span>    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a28278c2f408003c3c29064679be974e2">getDocumentRoot</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#afabfa25facbbc3f76345cfdf234ccc3b">  952</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#afabfa25facbbc3f76345cfdf234ccc3b">setStaticFileHeaders</a>(</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno">  953</span>        <span class="keyword">const</span> std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; &amp;headers) = 0;</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno">  954</span> </div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#af7d1dc6bc5a94bf47c5a4a843235273e">  973</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#af7d1dc6bc5a94bf47c5a4a843235273e">addALocation</a>(</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno">  974</span>        <span class="keyword">const</span> std::string &amp;uriPrefix,</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno">  975</span>        <span class="keyword">const</span> std::string &amp;defaultContentType = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno">  976</span>        <span class="keyword">const</span> std::string &amp;alias = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno">  977</span>        <span class="keywordtype">bool</span> isCaseSensitive = <span class="keyword">false</span>,</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno">  978</span>        <span class="keywordtype">bool</span> allowAll = <span class="keyword">true</span>,</div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno">  979</span>        <span class="keywordtype">bool</span> isRecursive = <span class="keyword">true</span>,</div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno">  980</span>        <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;middlewareNames = {}) = 0;</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno">  981</span> </div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno">  983</span> </div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a69710ac035beff2eff428ca8aca62274">  992</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a69710ac035beff2eff428ca8aca62274">setUploadPath</a>(<span class="keyword">const</span> std::string &amp;uploadPath) = 0;</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno">  993</span> </div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a1e0679219dd6bdcd385c16c175a9353c">  995</a></span>    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a1e0679219dd6bdcd385c16c175a9353c">getUploadPath</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno">  996</span> </div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno">  998</span> </div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2"> 1007</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2">setFileTypes</a>(</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span>        <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;types) = 0;</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> </div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span><span class="preprocessor">#if !defined(_WIN32) &amp;&amp; !TARGET_OS_IOS</span></div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> </div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a7ceba50e3d23c20fb1130b53f269aa0f"> 1025</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a7ceba50e3d23c20fb1130b53f269aa0f">enableDynamicViewsLoading</a>(</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span>        <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;libPaths,</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span>        <span class="keyword">const</span> std::string &amp;outputPath = <span class="stringliteral">&quot;&quot;</span>) = 0;</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> </div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> </div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a7a3f24f735d8b4a89d59952e006edb42"> 1037</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a7a3f24f735d8b4a89d59952e006edb42">setMaxConnectionNum</a>(<span class="keywordtype">size_t</span> maxConnections) = 0;</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> </div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> </div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a518cebb7cca6a3cadaadac85dacf90cd"> 1046</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a518cebb7cca6a3cadaadac85dacf90cd">setMaxConnectionNumPerIP</a>(</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span>        <span class="keywordtype">size_t</span> maxConnectionsPerIP) = 0;</div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> </div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> </div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a3a677163e37ee370dca947cd73618a8d"> 1056</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a3a677163e37ee370dca947cd73618a8d">enableRunAsDaemon</a>() = 0;</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> </div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> </div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad147ea3002f79436ddc7d71cb95b4349"> 1066</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad147ea3002f79436ddc7d71cb95b4349">disableSigtermHandling</a>() = 0;</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> </div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> </div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa02a066ab7da186c89cbe86a6afed06a"> 1075</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa02a066ab7da186c89cbe86a6afed06a">enableRelaunchOnError</a>() = 0;</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> </div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ac0ceb2bddf678e012b68bff13a2e032e"> 1089</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ac0ceb2bddf678e012b68bff13a2e032e">setLogPath</a>(</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span>        <span class="keyword">const</span> std::string &amp;logPath,</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span>        <span class="keyword">const</span> std::string &amp;logfileBaseName = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span>        <span class="keywordtype">size_t</span> logSize = 100000000,</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span>        <span class="keywordtype">size_t</span> maxFiles = 0,</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span>        <span class="keywordtype">bool</span> useSpdlog = <span class="keyword">false</span>) = 0;</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> </div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a3d587ec6b873375e6512fd4cf1379c75"> 1104</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a3d587ec6b873375e6512fd4cf1379c75">setLogLevel</a>(trantor::Logger::LogLevel level) = 0;</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> </div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> </div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa34219883b51989bebb0aef4f812707d"> 1114</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa34219883b51989bebb0aef4f812707d">setLogLocalTime</a>(<span class="keywordtype">bool</span> on) = 0;</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> </div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> </div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4982584f8996e7371a6393f65816d935"> 1128</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a4982584f8996e7371a6393f65816d935">enableSendfile</a>(<span class="keywordtype">bool</span> sendFile) = 0;</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> </div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> </div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#adf018700c57a6ca14d2c8ea811c25932"> 1142</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#adf018700c57a6ca14d2c8ea811c25932">enableGzip</a>(<span class="keywordtype">bool</span> useGzip) = 0;</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> </div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#afc2d00126e0d4faaf3fac7a07c0d2d4a"> 1145</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#afc2d00126e0d4faaf3fac7a07c0d2d4a">isGzipEnabled</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> </div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> </div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa0c66572e9341c5782045ccb854ebe05"> 1159</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa0c66572e9341c5782045ccb854ebe05">enableBrotli</a>(<span class="keywordtype">bool</span> useBrotli) = 0;</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> </div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a7f970411013ba4ba8cd8036feb0692e6"> 1162</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a7f970411013ba4ba8cd8036feb0692e6">isBrotliEnabled</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> </div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> </div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a0a6a7b6f237941e16f09a26d41103c6f"> 1172</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a0a6a7b6f237941e16f09a26d41103c6f">setStaticFilesCacheTime</a>(<span class="keywordtype">int</span> cacheTime) = 0;</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> </div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8ab6c816fadd534323d68d9ab65d910e"> 1175</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a8ab6c816fadd534323d68d9ab65d910e">staticFilesCacheTime</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> </div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> </div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a"> 1185</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">setIdleConnectionTimeout</a>(<span class="keywordtype">size_t</span> timeout) = 0;</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> </div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> </div>
<div class="foldopen" id="foldopen01196" data-start="{" data-end="}">
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae969ce5c4165fe3472ca4da6c9232dcc"> 1196</a></span>    <span class="keyword">inline</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae969ce5c4165fe3472ca4da6c9232dcc">setIdleConnectionTimeout</a>(</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span>        <span class="keyword">const</span> std::chrono::duration&lt;double&gt; &amp;timeout)</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span>    {</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span>        <span class="keywordflow">return</span> setIdleConnectionTimeout((<span class="keywordtype">size_t</span>)timeout.count());</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span>    }</div>
</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> </div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> </div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8d764c9333057b4dff82d85112598a27"> 1210</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a8d764c9333057b4dff82d85112598a27">setServerHeaderField</a>(</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span>        <span class="keyword">const</span> std::string &amp;server) = 0;</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> </div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> </div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a41aa615ffb255041767f764fac07f7c1"> 1219</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a41aa615ffb255041767f764fac07f7c1">enableServerHeader</a>(<span class="keywordtype">bool</span> flag) = 0;</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> </div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad1d815db1929a04af4231ccdab63142e"> 1227</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad1d815db1929a04af4231ccdab63142e">enableDateHeader</a>(<span class="keywordtype">bool</span> flag) = 0;</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> </div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> </div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae1fb314a643797c3c838129ea1052c2a"> 1238</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ae1fb314a643797c3c838129ea1052c2a">setKeepaliveRequestsNumber</a>(</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> number) = 0;</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> </div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> </div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8cd9ddada2792e6ade214f1c892a675c"> 1251</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a8cd9ddada2792e6ade214f1c892a675c">setPipeliningRequestsNumber</a>(</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> number) = 0;</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> </div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> </div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa8345103776398d6143c9201731ad5a4"> 1263</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa8345103776398d6143c9201731ad5a4">setGzipStatic</a>(<span class="keywordtype">bool</span> useGzipStatic) = 0;</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> </div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a9a97e8d845b2cbc974ba04341c278fc9"> 1274</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a9a97e8d845b2cbc974ba04341c278fc9">setBrStatic</a>(<span class="keywordtype">bool</span> useGzipStatic) = 0;</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> </div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a36c0da321a5b8ea26d04b1870d8c6275"> 1282</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a36c0da321a5b8ea26d04b1870d8c6275">setClientMaxBodySize</a>(<span class="keywordtype">size_t</span> maxSize) = 0;</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> </div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> </div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aaf62c16bf24e4997903a8e88a83debbd"> 1293</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aaf62c16bf24e4997903a8e88a83debbd">setClientMaxMemoryBodySize</a>(<span class="keywordtype">size_t</span> maxSize) = 0;</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> </div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> </div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a45928b4c3da43543455a6298821761f9"> 1301</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a45928b4c3da43543455a6298821761f9">setClientMaxWebSocketMessageSize</a>(</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span>        <span class="keywordtype">size_t</span> maxSize) = 0;</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span>    <span class="comment">// Set the HTML file of the home page, the default value is &quot;index.html&quot;</span></div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a6cab6cc475b7ff44c048b345cc40a911"> 1312</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a6cab6cc475b7ff44c048b345cc40a911">setHomePage</a>(<span class="keyword">const</span> std::string &amp;homePageFile) = 0;</div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> </div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a9d6e58208adc803f4f1adbcae1c74ebd"> 1324</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a9d6e58208adc803f4f1adbcae1c74ebd">setTermSignalHandler</a>(</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>()&gt; &amp;handler) = 0;</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> </div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ad8d263e25fd3093a2991375043e8885d"> 1337</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad8d263e25fd3093a2991375043e8885d">setIntSignalHandler</a>(</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span>        <span class="keyword">const</span> std::function&lt;<span class="keywordtype">void</span>()&gt; &amp;handler) = 0;</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> </div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> </div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aee1c93381197890e0cbac1d0a9837c86"> 1345</a></span>    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aee1c93381197890e0cbac1d0a9837c86">getHomePage</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> </div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> </div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a280b1e1a57aee757eccd92a0a2abe1e9"> 1358</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a280b1e1a57aee757eccd92a0a2abe1e9">setImplicitPageEnable</a>(<span class="keywordtype">bool</span> useImplicitPage) = 0;</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> </div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> </div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a503e40d551e6d3b68beed0bd98a6825c"> 1365</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a503e40d551e6d3b68beed0bd98a6825c">isImplicitPageEnabled</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> </div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> </div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#adc6e26bbb45d1b14784d97d00e949ee9"> 1376</a></span>    <span class="keyword">virtual</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#adc6e26bbb45d1b14784d97d00e949ee9">setImplicitPage</a>(</div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span>        <span class="keyword">const</span> std::string &amp;implicitPageFile) = 0;</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> </div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> </div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a69b2594f9a7ceefda06caf4e545a7376"> 1384</a></span>    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string &amp;<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a69b2594f9a7ceefda06caf4e545a7376">getImplicitPage</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> </div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> </div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a0d7e5636304cbdf0e307029e8c4affc8"> 1391</a></span>    <span class="keyword">virtual</span> orm::DbClientPtr <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a0d7e5636304cbdf0e307029e8c4affc8">getDbClient</a>(</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span>        <span class="keyword">const</span> std::string &amp;name = <span class="stringliteral">&quot;default&quot;</span>) = 0;</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> </div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> </div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ac707080880ab7c471af5d7e126c75d8f"> 1399</a></span>    <span class="keyword">virtual</span> orm::DbClientPtr <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ac707080880ab7c471af5d7e126c75d8f">getFastDbClient</a>(</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span>        <span class="keyword">const</span> std::string &amp;name = <span class="stringliteral">&quot;default&quot;</span>) = 0;</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> </div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a9cd5437ac43356e1b0f6f06c8c6a046b"> 1406</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a9cd5437ac43356e1b0f6f06c8c6a046b">areAllDbClientsAvailable</a>() const noexcept = 0;</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> </div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> </div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ab14ee7b684523f71def60f47484e3edb"> 1413</a></span>    virtual nosql::RedisClientPtr getRedisClient(</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span>        const std::<span class="keywordtype">string</span> &amp;name = &quot;default&quot;) = 0;</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> </div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> </div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aa0b28f4bbe9d7e1c2d18dd88f65fd92f"> 1421</a></span>    virtual nosql::RedisClientPtr getFastRedisClient(</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span>        const std::<span class="keywordtype">string</span> &amp;name = &quot;default&quot;) = 0;</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> </div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a17f4f8e6d76eb7fa28ab8bad5892d2b3"> 1431</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setJsonParserStackLimit(</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span>        <span class="keywordtype">size_t</span> limit) noexcept = 0;</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> </div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a53e136a4fe9f8457dd10dba7c16976bf"> 1438</a></span>    virtual <span class="keywordtype">size_t</span> getJsonParserStackLimit() const noexcept = 0;</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ab68f020f7725e5eebcc98b6eedc7522e"> 1445</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setUnicodeEscapingInJson(</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span>        <span class="keywordtype">bool</span> enable) noexcept = 0;</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> </div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a335ea930d4ef7c1e15fe6f5cb365532e"> 1452</a></span>    virtual <span class="keywordtype">bool</span> isUnicodeEscapingUsedInJson() const noexcept = 0;</div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> </div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8a23c529a665eec3df0a9ca96862f6e8"> 1464</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setFloatPrecisionInJson(</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span>        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> precision,</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span>        const std::<span class="keywordtype">string</span> &amp;precisionType = &quot;significant&quot;) noexcept = 0;</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span>    virtual const std::pair&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>, std::<span class="keywordtype">string</span>&gt; &amp;</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ace68f1911549b60be256a3a3f2791574"> 1473</a></span>    getFloatPrecisionInJson() const noexcept = 0;</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> </div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span>    [[deprecated(&quot;Use addDbClient() instead&quot;)]] virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a725518abacc673f1f11016e026edc138"> 1496</a></span>    createDbClient(const std::<span class="keywordtype">string</span> &amp;dbType,</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span>                   const std::<span class="keywordtype">string</span> &amp;host,</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span>                   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> port,</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span>                   const std::<span class="keywordtype">string</span> &amp;databaseName,</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span>                   const std::<span class="keywordtype">string</span> &amp;userName,</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span>                   const std::<span class="keywordtype">string</span> &amp;password,</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span>                   <span class="keywordtype">size_t</span> connectionNum = 1,</div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span>                   const std::<span class="keywordtype">string</span> &amp;filename = &quot;&quot;,</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span>                   const std::<span class="keywordtype">string</span> &amp;name = &quot;default&quot;,</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span>                   <span class="keywordtype">bool</span> isFast = false,</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span>                   const std::<span class="keywordtype">string</span> &amp;characterSet = &quot;&quot;,</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span>                   <span class="keywordtype">double</span> timeout = -1.0,</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span>                   <span class="keywordtype">bool</span> autoBatch = false) = 0;</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> </div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#aedc3d404dd8a2607ac3b0db7caf21a68"> 1510</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;addDbClient(const orm::DbConfig &amp;config) = 0;</div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> </div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> </div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a95ff94b097d0c270577de623717feffb"> 1525</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;createRedisClient(</div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span>        const std::<span class="keywordtype">string</span> &amp;ip,</div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span>        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> port,</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span>        const std::<span class="keywordtype">string</span> &amp;name = &quot;default&quot;,</div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span>        const std::<span class="keywordtype">string</span> &amp;password = &quot;&quot;,</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span>        <span class="keywordtype">size_t</span> connectionNum = 1,</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span>        <span class="keywordtype">bool</span> isFast = false,</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span>        <span class="keywordtype">double</span> timeout = -1.0,</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span>        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> db = 0,</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span>        const std::<span class="keywordtype">string</span> &amp;username = &quot;&quot;) = 0;</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> </div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> </div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a63ddf81daba69969ba1b613eea7c70ca"> 1542</a></span>    virtual const std::shared_ptr&lt;trantor::Resolver&gt; &amp;getResolver() const = 0;</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> </div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a395602917030a9f4d11455d77b99ae43"> 1545</a></span>    virtual <span class="keywordtype">bool</span> supportSSL() const = 0;</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> </div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#af59cc013141e80a539e3dc6d1d4423c5"> 1562</a></span>    virtual <span class="keywordtype">size_t</span> getCurrentThreadIndex() const = 0;</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> </div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ac936c105cb3be034b5010e15012661b1"> 1571</a></span>    virtual std::vector&lt;trantor::InetAddress&gt; getListeners() const = 0;</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> </div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#abaa5973fbb87248c2430b28105fd43ba"> 1581</a></span>    virtual <span class="keywordtype">void</span> enableReusePort(<span class="keywordtype">bool</span> enable = true) = 0;</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> </div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a865eff6a9fe531389ca6f73b5b057c8f"> 1586</a></span>    virtual <span class="keywordtype">bool</span> reusePort() const = 0;</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> </div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8cb71111ea2c0cf6e8d188719131f436"> 1591</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setExceptionHandler(<a class="code hl_typedef" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> handler) = 0;</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> </div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ab7cab4117fd533b8434b434ffe3e4a57"> 1596</a></span>    virtual const <a class="code hl_typedef" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> &amp;getExceptionHandler() const = 0;</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> </div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a182d73ab3ebc7779a3d22ea7ae92417b"> 1601</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;registerCustomExtensionMime(</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span>        const std::<span class="keywordtype">string</span> &amp;ext,</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span>        const std::<span class="keywordtype">string</span> &amp;mime) = 0;</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span> </div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a4870d11d7c7db833d51a3fa3fe6c4675"> 1605</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;enableCompressedRequest(<span class="keywordtype">bool</span> enable = true) = 0;</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a904b6dd3b5b2d4db8b59d65a77c7da4a"> 1606</a></span>    virtual <span class="keywordtype">bool</span> isCompressedRequestEnabled() const = 0;</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span>    <span class="comment">/*</span></div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span><span class="comment">     * @brief get the number of active connections.</span></div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span><span class="comment">     */</span></div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#ae302b135b92260ba230cad55f0d97ed0"> 1610</a></span>    virtual int64_t getConnectionCount() const = 0;</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> </div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8fb989335bfd8f81be21514799c04de3"> 1617</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setBeforeListenSockOptCallback(</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span>        std::function&lt;<span class="keywordtype">void</span>(<span class="keywordtype">int</span>)&gt; cb) = 0;</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> </div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#a8798844067f66159bd0377f816999967"> 1625</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setAfterAcceptSockOptCallback(</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span>        std::function&lt;<span class="keywordtype">void</span>(<span class="keywordtype">int</span>)&gt; cb) = 0;</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> </div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#addb73b0199a3fe628f1628f511e26ec5"> 1634</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;setConnectionCallback(</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span>        std::function&lt;<span class="keywordtype">void</span>(const trantor::TcpConnectionPtr &amp;)&gt; cb) = 0;</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> </div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#afb7c4868a218f7ff3daf7ce88533ad44"> 1637</a></span>    virtual <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;enableRequestStream(<span class="keywordtype">bool</span> enable = true) = 0;</div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"><a class="line" href="classdrogon_1_1HttpAppFramework.html#abed3bba7b1adf8b87a3e2141ec2c7915"> 1638</a></span>    virtual <span class="keywordtype">bool</span> isRequestStreamEnabled() const = 0;</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> </div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span>  private:</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span>    virtual <span class="keywordtype">void</span> registerHttpController(</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span>        const std::<span class="keywordtype">string</span> &amp;pathPattern,</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span>        const internal::HttpBinderBasePtr &amp;binder,</div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span>        const std::vector&lt;<a class="code hl_enumeration" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642">HttpMethod</a>&gt; &amp;validMethods = {},</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span>        <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;middlewareNames = {},</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span>        <span class="keyword">const</span> std::string &amp;handlerName = <span class="stringliteral">&quot;&quot;</span>) = 0;</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> registerHttpControllerViaRegex(</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span>        <span class="keyword">const</span> std::string &amp;regExp,</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span>        <span class="keyword">const</span> internal::HttpBinderBasePtr &amp;binder,</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span>        <span class="keyword">const</span> std::vector&lt;HttpMethod&gt; &amp;validMethods,</div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span>        <span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;middlewareNames,</div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span>        <span class="keyword">const</span> std::string &amp;handlerName) = 0;</div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span>};</div>
</div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> </div>
<div class="foldopen" id="foldopen01656" data-start="{" data-end="}">
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"><a class="line" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906"> 1656</a></span><span class="keyword">inline</span> <a class="code hl_class" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;<a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>()</div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span>{</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span>    <span class="keywordflow">return</span> <a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae">HttpAppFramework::instance</a>();</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span>}</div>
</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span><span class="preprocessor">#ifdef __cpp_impl_coroutine</span></div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span><span class="keyword">namespace </span>internal</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span>{</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span><span class="keyword">inline</span> <span class="keywordtype">void</span> ForwardAwaiter::await_suspend(</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span>    std::coroutine_handle&lt;&gt; handle) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span>{</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span>    app_.forward(</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span>        req_,</div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span>        [<span class="keyword">this</span>, handle](<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">drogon::HttpResponsePtr</a> &amp;resp) {</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span>            setValue(resp);</div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span>            handle.resume();</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span>        },</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span>        host_,</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span>        timeout_);</div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span>}</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span>}  <span class="comment">// namespace internal</span></div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span>}  <span class="comment">// namespace drogon</span></div>
<div class="ttc" id="aCacheMap_8h_html"><div class="ttname"><a href="CacheMap_8h.html">CacheMap.h</a></div></div>
<div class="ttc" id="aCookie_8h_html"><div class="ttname"><a href="Cookie_8h.html">Cookie.h</a></div></div>
<div class="ttc" id="aDrObject_8h_html"><div class="ttname"><a href="DrObject_8h.html">DrObject.h</a></div></div>
<div class="ttc" id="aHttpBinder_8h_html"><div class="ttname"><a href="HttpBinder_8h.html">HttpBinder.h</a></div></div>
<div class="ttc" id="aHttpFilter_8h_html"><div class="ttname"><a href="HttpFilter_8h.html">HttpFilter.h</a></div></div>
<div class="ttc" id="aHttpRequest_8h_html"><div class="ttname"><a href="HttpRequest_8h.html">HttpRequest.h</a></div></div>
<div class="ttc" id="aHttpResponse_8h_html"><div class="ttname"><a href="HttpResponse_8h.html">HttpResponse.h</a></div></div>
<div class="ttc" id="aMultiPart_8h_html"><div class="ttname"><a href="MultiPart_8h.html">MultiPart.h</a></div></div>
<div class="ttc" id="aNotFound_8h_html"><div class="ttname"><a href="NotFound_8h.html">NotFound.h</a></div></div>
<div class="ttc" id="aclassdrogon_1_1Cookie_html_af0969c5652b7eeab6ccf22d319047e3c"><div class="ttname"><a href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">drogon::Cookie::SameSite</a></div><div class="ttdeci">SameSite</div><div class="ttdef"><b>Definition</b> Cookie.h:46</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html">drogon::HttpAppFramework</a></div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:113</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a097b900f53bc40913d8688e5e6abaf58"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a097b900f53bc40913d8688e5e6abaf58">drogon::HttpAppFramework::setCustomErrorHandler</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setCustomErrorHandler(std::function&lt; HttpResponsePtr(HttpStatusCode, const HttpRequestPtr &amp;req)&gt; &amp;&amp;resp_generator)=0</div><div class="ttdoc">Set custom error handler</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a0a6a7b6f237941e16f09a26d41103c6f"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a0a6a7b6f237941e16f09a26d41103c6f">drogon::HttpAppFramework::setStaticFilesCacheTime</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setStaticFilesCacheTime(int cacheTime)=0</div><div class="ttdoc">Set the time in which the static file response is cached in memory.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a0d7e5636304cbdf0e307029e8c4affc8"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a0d7e5636304cbdf0e307029e8c4affc8">drogon::HttpAppFramework::getDbClient</a></div><div class="ttdeci">virtual orm::DbClientPtr getDbClient(const std::string &amp;name=&quot;default&quot;)=0</div><div class="ttdoc">Get a database client by name</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a0e430398838613d0275ccd25833cba54"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a0e430398838613d0275ccd25833cba54">drogon::HttpAppFramework::registerPreHandlingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPreHandlingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;, AdviceCallback &amp;&amp;, AdviceChainCallback &amp;&amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice called before the request is handled</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a15cfc37d6c6e565ef38ec1a999dfd6e2"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a15cfc37d6c6e565ef38ec1a999dfd6e2">drogon::HttpAppFramework::setThreadNum</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setThreadNum(size_t threadNum)=0</div><div class="ttdoc">Set the number of threads for IO event loops</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a194c7c36502fdd6bc23a033ca2fa4cec"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a194c7c36502fdd6bc23a033ca2fa4cec">drogon::HttpAppFramework::registerWebSocketController</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerWebSocketController(const std::string &amp;pathName, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={})=0</div><div class="ttdoc">Register a WebSocketController into the framework.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a1c52cf207a40665d58529987b63db572"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a1c52cf207a40665d58529987b63db572">drogon::HttpAppFramework::getPlugin</a></div><div class="ttdeci">virtual PluginBase * getPlugin(const std::string &amp;name)=0</div><div class="ttdoc">the plugin object registered in the framework</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a1d469f2033f6466ee445cdad67d3fb88"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a1d469f2033f6466ee445cdad67d3fb88">drogon::HttpAppFramework::registerSessionStartAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerSessionStartAdvice(const AdviceStartSessionCallback &amp;advice)=0</div><div class="ttdoc">Register an advice called when starting a new session.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a1e0679219dd6bdcd385c16c175a9353c"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a1e0679219dd6bdcd385c16c175a9353c">drogon::HttpAppFramework::getUploadPath</a></div><div class="ttdeci">virtual const std::string &amp; getUploadPath() const =0</div><div class="ttdoc">Get the path to store uploaded files.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a20bdfc6b3d4dd364018fd4a342f42700"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a20bdfc6b3d4dd364018fd4a342f42700">drogon::HttpAppFramework::addPlugin</a></div><div class="ttdeci">virtual void addPlugin(const std::string &amp;name, const std::vector&lt; std::string &gt; &amp;dependencies, const Json::Value &amp;config)=0</div><div class="ttdoc">Add a plugin</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a280b1e1a57aee757eccd92a0a2abe1e9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a280b1e1a57aee757eccd92a0a2abe1e9">drogon::HttpAppFramework::setImplicitPageEnable</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setImplicitPageEnable(bool useImplicitPage)=0</div><div class="ttdoc">Set to enable implicit pages, enabled by default</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a28278c2f408003c3c29064679be974e2"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a28278c2f408003c3c29064679be974e2">drogon::HttpAppFramework::getDocumentRoot</a></div><div class="ttdeci">virtual const std::string &amp; getDocumentRoot() const =0</div><div class="ttdoc">Get the document root directory.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a296351b980c11a6885448007298e4e61"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a296351b980c11a6885448007298e4e61">drogon::HttpAppFramework::enableSession</a></div><div class="ttdeci">HttpAppFramework &amp; enableSession(const std::chrono::duration&lt; double &gt; &amp;timeout, Cookie::SameSite sameSite=Cookie::SameSite::kNull, const std::string &amp;cookieKey=&quot;JSESSIONID&quot;, int maxAge=-1, std::function&lt; std::string()&gt; idGeneratorCallback=nullptr)</div><div class="ttdoc">A wrapper of the above method.</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:902</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a33e3d404b2b91723397e6c2861e7c7fc"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a33e3d404b2b91723397e6c2861e7c7fc">drogon::HttpAppFramework::setCustomErrorHandler</a></div><div class="ttdeci">HttpAppFramework &amp; setCustomErrorHandler(std::function&lt; HttpResponsePtr(HttpStatusCode)&gt; &amp;&amp;resp_generator)</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:191</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a36c0da321a5b8ea26d04b1870d8c6275"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a36c0da321a5b8ea26d04b1870d8c6275">drogon::HttpAppFramework::setClientMaxBodySize</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setClientMaxBodySize(size_t maxSize)=0</div><div class="ttdoc">Set the max body size of the requests received by drogon.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a3a677163e37ee370dca947cd73618a8d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a3a677163e37ee370dca947cd73618a8d">drogon::HttpAppFramework::enableRunAsDaemon</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableRunAsDaemon()=0</div><div class="ttdoc">Make the application run as a daemon.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a3d587ec6b873375e6512fd4cf1379c75"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a3d587ec6b873375e6512fd4cf1379c75">drogon::HttpAppFramework::setLogLevel</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setLogLevel(trantor::Logger::LogLevel level)=0</div><div class="ttdoc">Set the log level.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a41aa615ffb255041767f764fac07f7c1"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a41aa615ffb255041767f764fac07f7c1">drogon::HttpAppFramework::enableServerHeader</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableServerHeader(bool flag)=0</div><div class="ttdoc">Control if the 'Server' header is added to each HTTP response.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a45928b4c3da43543455a6298821761f9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a45928b4c3da43543455a6298821761f9">drogon::HttpAppFramework::setClientMaxWebSocketMessageSize</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setClientMaxWebSocketMessageSize(size_t maxSize)=0</div><div class="ttdoc">Set the max size of messages sent by WebSocket client.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a46367f2b300bfc09bea762c4402c1de2"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2">drogon::HttpAppFramework::setFileTypes</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setFileTypes(const std::vector&lt; std::string &gt; &amp;types)=0</div><div class="ttdoc">Set types of files that can be downloaded.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a47fa6bc37acd6eef4370e070e958de34"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">drogon::HttpAppFramework::enableSession</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableSession(const size_t timeout=0, Cookie::SameSite sameSite=Cookie::SameSite::kNull, const std::string &amp;cookieKey=&quot;JSESSIONID&quot;, int maxAge=-1, std::function&lt; std::string()&gt; idGeneratorCallback=nullptr)=0</div><div class="ttdoc">Enable sessions supporting.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4982584f8996e7371a6393f65816d935"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4982584f8996e7371a6393f65816d935">drogon::HttpAppFramework::enableSendfile</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableSendfile(bool sendFile)=0</div><div class="ttdoc">Enable the sendfile system call in linux.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4aaac51bddf4870ea90b36176673bcfd"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4aaac51bddf4870ea90b36176673bcfd">drogon::HttpAppFramework::getSharedPlugin</a></div><div class="ttdeci">virtual std::shared_ptr&lt; PluginBase &gt; getSharedPlugin(const std::string &amp;name)=0</div><div class="ttdoc">Get the shared_ptr plugin object registered in the framework</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4b66acb61e3cb3cf00e012dc470699c5"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4b66acb61e3cb3cf00e012dc470699c5">drogon::HttpAppFramework::loadConfigJson</a></div><div class="ttdeci">virtual HttpAppFramework &amp; loadConfigJson(const Json::Value &amp;data) noexcept(false)=0</div><div class="ttdoc">Load the configuration from a Json::Value Object.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4c12778b39a3cd7e5bc1bafb285d118e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e">drogon::HttpAppFramework::run</a></div><div class="ttdeci">virtual void run()=0</div><div class="ttdoc">Run the event loop</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4c6d63f9e8ea38d19cf220cca04eca52"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4c6d63f9e8ea38d19cf220cca04eca52">drogon::HttpAppFramework::setCustom404Page</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setCustom404Page(const HttpResponsePtr &amp;resp, bool set404=true)=0</div><div class="ttdoc">Set custom 404 page</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a4f2096ccf94dd558ce1c5751783c0430"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a4f2096ccf94dd558ce1c5751783c0430">drogon::HttpAppFramework::registerHttpResponseCreationAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerHttpResponseCreationAdvice(const std::function&lt; void(const HttpResponsePtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice for new HTTP responses.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a503e40d551e6d3b68beed0bd98a6825c"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a503e40d551e6d3b68beed0bd98a6825c">drogon::HttpAppFramework::isImplicitPageEnabled</a></div><div class="ttdeci">virtual bool isImplicitPageEnabled() const =0</div><div class="ttdoc">Return true if implicit pages are enabled</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a518cebb7cca6a3cadaadac85dacf90cd"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a518cebb7cca6a3cadaadac85dacf90cd">drogon::HttpAppFramework::setMaxConnectionNumPerIP</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setMaxConnectionNumPerIP(size_t maxConnectionsPerIP)=0</div><div class="ttdoc">Set the maximum number of connections per remote IP.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a51de1aa2e007cd261435b0d8ad6c5b1d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a51de1aa2e007cd261435b0d8ad6c5b1d">drogon::HttpAppFramework::registerPreSendingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPreSendingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;, const HttpResponsePtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice called before a response is sent to the client.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a544b6539c7ffebce6c73f963502c6c99"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a544b6539c7ffebce6c73f963502c6c99">drogon::HttpAppFramework::registerHandlerViaRegex</a></div><div class="ttdeci">HttpAppFramework &amp; registerHandlerViaRegex(const std::string &amp;regExp, FUNCTION &amp;&amp;function, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={}, const std::string &amp;handlerName=&quot;&quot;)</div><div class="ttdoc">Register a handler into the framework via a regular expression.</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:586</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a561bb2c79c7e50f25bf22e9d2dbed4c4"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a561bb2c79c7e50f25bf22e9d2dbed4c4">drogon::HttpAppFramework::registerPostRoutingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPostRoutingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an observer called after routing</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a56400ea928b04fa063aec0296bc2a4d7"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a56400ea928b04fa063aec0296bc2a4d7">drogon::HttpAppFramework::registerNewConnectionAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerNewConnectionAdvice(const std::function&lt; bool(const trantor::InetAddress &amp;, const trantor::InetAddress &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice for new connections</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a58d7081d285af682bad71f5151e95aae"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae">drogon::HttpAppFramework::instance</a></div><div class="ttdeci">static HttpAppFramework &amp; instance()</div><div class="ttdoc">Get the instance of HttpAppFramework</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a5ceb03d8c45fab4f83b5d273cef8123e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a5ceb03d8c45fab4f83b5d273cef8123e">drogon::HttpAppFramework::registerMiddleware</a></div><div class="ttdeci">HttpAppFramework &amp; registerMiddleware(const std::shared_ptr&lt; T &gt; &amp;middlewarePtr)</div><div class="ttdoc">Register middleware objects created and initialized by the user</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:709</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a67e7e6ced70a0f06d3b6ed67bceda81e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a67e7e6ced70a0f06d3b6ed67bceda81e">drogon::HttpAppFramework::registerPostRoutingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPostRoutingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;, AdviceCallback &amp;&amp;, AdviceChainCallback &amp;&amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice called after routing</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a68bae121605b64f6694f011471607ed2"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a68bae121605b64f6694f011471607ed2">drogon::HttpAppFramework::registerSessionDestroyAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerSessionDestroyAdvice(const AdviceDestroySessionCallback &amp;advice)=0</div><div class="ttdoc">Register an advice called when destroying a session.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a69710ac035beff2eff428ca8aca62274"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a69710ac035beff2eff428ca8aca62274">drogon::HttpAppFramework::setUploadPath</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setUploadPath(const std::string &amp;uploadPath)=0</div><div class="ttdoc">Set the path to store uploaded files.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a69b2594f9a7ceefda06caf4e545a7376"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a69b2594f9a7ceefda06caf4e545a7376">drogon::HttpAppFramework::getImplicitPage</a></div><div class="ttdeci">virtual const std::string &amp; getImplicitPage() const =0</div><div class="ttdoc">Get the implicit HTML page</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a6cab6cc475b7ff44c048b345cc40a911"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a6cab6cc475b7ff44c048b345cc40a911">drogon::HttpAppFramework::setHomePage</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setHomePage(const std::string &amp;homePageFile)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a6ce215269eff3565941a41f8fa5262f9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a6ce215269eff3565941a41f8fa5262f9">drogon::HttpAppFramework::reloadSSLFiles</a></div><div class="ttdeci">virtual HttpAppFramework &amp; reloadSSLFiles()=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a6f4c83d2575453fe1efd60464431608c"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a6f4c83d2575453fe1efd60464431608c">drogon::HttpAppFramework::getCustomConfig</a></div><div class="ttdeci">virtual const Json::Value &amp; getCustomConfig() const =0</div><div class="ttdoc">Get the custom configuration defined by users in the configuration file.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a70620e30f472b8ddd5a07d49d7c44bed"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">drogon::HttpAppFramework::registerHttpSimpleController</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerHttpSimpleController(const std::string &amp;pathName, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={})=0</div><div class="ttdoc">Register a HttpSimpleController object into the framework.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a77371eb0a56cde3fe1301e2f3ef7f2b9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a77371eb0a56cde3fe1301e2f3ef7f2b9">drogon::HttpAppFramework::setDocumentRoot</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setDocumentRoot(const std::string &amp;rootPath)=0</div><div class="ttdoc">Set the root path of HTTP document, default path is ./</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a7a3f24f735d8b4a89d59952e006edb42"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a7a3f24f735d8b4a89d59952e006edb42">drogon::HttpAppFramework::setMaxConnectionNum</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setMaxConnectionNum(size_t maxConnections)=0</div><div class="ttdoc">Set the maximum number of all connections.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a7ccdc4847bcdf044c2d8cd884f176b9b"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a7ccdc4847bcdf044c2d8cd884f176b9b">drogon::HttpAppFramework::registerPreRoutingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPreRoutingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;, AdviceCallback &amp;&amp;, AdviceChainCallback &amp;&amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice called before routing</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a7ceba50e3d23c20fb1130b53f269aa0f"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a7ceba50e3d23c20fb1130b53f269aa0f">drogon::HttpAppFramework::enableDynamicViewsLoading</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableDynamicViewsLoading(const std::vector&lt; std::string &gt; &amp;libPaths, const std::string &amp;outputPath=&quot;&quot;)=0</div><div class="ttdoc">Enable supporting for dynamic views loading.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a7eb8c7537a3321e5221616400337f781"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a7eb8c7537a3321e5221616400337f781">drogon::HttpAppFramework::registerFilter</a></div><div class="ttdeci">HttpAppFramework &amp; registerFilter(const std::shared_ptr&lt; T &gt; &amp;filterPtr)</div><div class="ttdoc">Register filter objects created and initialized by the user</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:692</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a7f970411013ba4ba8cd8036feb0692e6"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a7f970411013ba4ba8cd8036feb0692e6">drogon::HttpAppFramework::isBrotliEnabled</a></div><div class="ttdeci">virtual bool isBrotliEnabled() const =0</div><div class="ttdoc">Return true if brotli is enabled.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a81a7e3e6e3788aaa5a2ae342241efa9f"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a81a7e3e6e3788aaa5a2ae342241efa9f">drogon::HttpAppFramework::setSSLConfigCommands</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setSSLConfigCommands(const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;sslConfCmds)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a86eee98f7daa1ce128abe211a524823f"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a86eee98f7daa1ce128abe211a524823f">drogon::HttpAppFramework::getCustomErrorHandler</a></div><div class="ttdeci">virtual const std::function&lt; HttpResponsePtr(HttpStatusCode, const HttpRequestPtr &amp;req)&gt; &amp; getCustomErrorHandler() const =0</div><div class="ttdoc">Get custom error handler</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a8910690898d8e7e4fffb008da4e0a6d0"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a8910690898d8e7e4fffb008da4e0a6d0">drogon::HttpAppFramework::disableSession</a></div><div class="ttdeci">virtual HttpAppFramework &amp; disableSession()=0</div><div class="ttdoc">Disable sessions supporting.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a8ab6c816fadd534323d68d9ab65d910e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a8ab6c816fadd534323d68d9ab65d910e">drogon::HttpAppFramework::staticFilesCacheTime</a></div><div class="ttdeci">virtual int staticFilesCacheTime() const =0</div><div class="ttdoc">Get the time set by the above method.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a8cd9ddada2792e6ade214f1c892a675c"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a8cd9ddada2792e6ade214f1c892a675c">drogon::HttpAppFramework::setPipeliningRequestsNumber</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setPipeliningRequestsNumber(const size_t number)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a8d764c9333057b4dff82d85112598a27"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a8d764c9333057b4dff82d85112598a27">drogon::HttpAppFramework::setServerHeaderField</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setServerHeaderField(const std::string &amp;server)=0</div><div class="ttdoc">Set the 'server' header field in each response sent by drogon.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a910393970399e64c391d92f8360f99bf"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">drogon::HttpAppFramework::registerController</a></div><div class="ttdeci">HttpAppFramework &amp; registerController(const std::shared_ptr&lt; T &gt; &amp;ctrlPtr)</div><div class="ttdoc">Register controller objects created and initialized by the user</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:672</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a9a97e8d845b2cbc974ba04341c278fc9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a9a97e8d845b2cbc974ba04341c278fc9">drogon::HttpAppFramework::setBrStatic</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setBrStatic(bool useGzipStatic)=0</div><div class="ttdoc">Set the br_static option.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a9cd5437ac43356e1b0f6f06c8c6a046b"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a9cd5437ac43356e1b0f6f06c8c6a046b">drogon::HttpAppFramework::areAllDbClientsAvailable</a></div><div class="ttdeci">virtual bool areAllDbClientsAvailable() const noexcept=0</div><div class="ttdoc">Check if all database clients in the framework are available (connect to the database successfully).</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a9d6e58208adc803f4f1adbcae1c74ebd"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a9d6e58208adc803f4f1adbcae1c74ebd">drogon::HttpAppFramework::setTermSignalHandler</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setTermSignalHandler(const std::function&lt; void()&gt; &amp;handler)=0</div><div class="ttdoc">Set the TERM Signal Handler. This method provides a way to users for exiting program gracefully....</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a9f4430485256d7523177a371279a5d0e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a9f4430485256d7523177a371279a5d0e">drogon::HttpAppFramework::addPlugins</a></div><div class="ttdeci">virtual void addPlugins(const Json::Value &amp;configs)=0</div><div class="ttdoc">Add plugins</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a9fa6352150ac9d3a76b621a2abdc2774"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a9fa6352150ac9d3a76b621a2abdc2774">drogon::HttpAppFramework::getIOLoop</a></div><div class="ttdeci">virtual trantor::EventLoop * getIOLoop(size_t id) const =0</div><div class="ttdoc">Get an IO loop with id. E.g. 0 &lt;= id &lt; #Total thread-loops</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa02a066ab7da186c89cbe86a6afed06a"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa02a066ab7da186c89cbe86a6afed06a">drogon::HttpAppFramework::enableRelaunchOnError</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableRelaunchOnError()=0</div><div class="ttdoc">Make the application restart after crashing.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa0c66572e9341c5782045ccb854ebe05"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa0c66572e9341c5782045ccb854ebe05">drogon::HttpAppFramework::enableBrotli</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableBrotli(bool useBrotli)=0</div><div class="ttdoc">Enable brotli compression.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa34219883b51989bebb0aef4f812707d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa34219883b51989bebb0aef4f812707d">drogon::HttpAppFramework::setLogLocalTime</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setLogLocalTime(bool on)=0</div><div class="ttdoc">Set the log time display</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa4fa25be4e600a3b9dbe881a39b0ea7a"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">drogon::HttpAppFramework::setIdleConnectionTimeout</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setIdleConnectionTimeout(size_t timeout)=0</div><div class="ttdoc">Set the lifetime of the connection without read or write</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa7319b9724468565502b643e64472276"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276">drogon::HttpAppFramework::quit</a></div><div class="ttdeci">virtual void quit()=0</div><div class="ttdoc">Quit the event loop</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa8345103776398d6143c9201731ad5a4"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa8345103776398d6143c9201731ad5a4">drogon::HttpAppFramework::setGzipStatic</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setGzipStatic(bool useGzipStatic)=0</div><div class="ttdoc">Set the gzip_static option.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa962f3f0471d61293175b49fe9c46145"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa962f3f0471d61293175b49fe9c46145">drogon::HttpAppFramework::isRunning</a></div><div class="ttdeci">virtual bool isRunning()=0</div><div class="ttdoc">Return true if the framework is running</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aac447a3eab0f894d546b585ee8a87d76"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aac447a3eab0f894d546b585ee8a87d76">drogon::HttpAppFramework::getHandlersInfo</a></div><div class="ttdeci">virtual std::vector&lt; HttpHandlerInfo &gt; getHandlersInfo() const =0</div><div class="ttdoc">Get information about the handlers registered to drogon</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aaf62c16bf24e4997903a8e88a83debbd"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aaf62c16bf24e4997903a8e88a83debbd">drogon::HttpAppFramework::setClientMaxMemoryBodySize</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setClientMaxMemoryBodySize(size_t maxSize)=0</div><div class="ttdoc">Set the maximum body size in memory of HTTP requests received by drogon.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ab8617b790e684ba060b7847c795fe627"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ab8617b790e684ba060b7847c795fe627">drogon::HttpAppFramework::setupFileLogger</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setupFileLogger()=0</div><div class="ttdoc">Setup output of logs to files</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aba2cdc1128b3e48d34119cd03c1f46b3"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aba2cdc1128b3e48d34119cd03c1f46b3">drogon::HttpAppFramework::registerPostHandlingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPostHandlingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;, const HttpResponsePtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an advice called after the request is handled</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_abe544fdfd2e493efe64e2ebff637800d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#abe544fdfd2e493efe64e2ebff637800d">drogon::HttpAppFramework::registerPreRoutingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPreRoutingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an observer called before routing</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ac0ceb2bddf678e012b68bff13a2e032e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ac0ceb2bddf678e012b68bff13a2e032e">drogon::HttpAppFramework::setLogPath</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setLogPath(const std::string &amp;logPath, const std::string &amp;logfileBaseName=&quot;&quot;, size_t logSize=100000000, size_t maxFiles=0, bool useSpdlog=false)=0</div><div class="ttdoc">Set the output path of logs.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ac5d36ac393507bbe1c3efbd16ead94ca"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ac5d36ac393507bbe1c3efbd16ead94ca">drogon::HttpAppFramework::registerPreHandlingAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerPreHandlingAdvice(const std::function&lt; void(const HttpRequestPtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register an observer called before the request is handled</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ac707080880ab7c471af5d7e126c75d8f"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ac707080880ab7c471af5d7e126c75d8f">drogon::HttpAppFramework::getFastDbClient</a></div><div class="ttdeci">virtual orm::DbClientPtr getFastDbClient(const std::string &amp;name=&quot;default&quot;)=0</div><div class="ttdoc">Get a 'fast' database client by name</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad00fae1ce683797d2ef05dae7177e7b7"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">drogon::HttpAppFramework::registerHandler</a></div><div class="ttdeci">HttpAppFramework &amp; registerHandler(const std::string &amp;pathPattern, FUNCTION &amp;&amp;function, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={}, const std::string &amp;handlerName=&quot;&quot;)</div><div class="ttdoc">Register a handler into the framework.</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:535</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad147ea3002f79436ddc7d71cb95b4349"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad147ea3002f79436ddc7d71cb95b4349">drogon::HttpAppFramework::disableSigtermHandling</a></div><div class="ttdeci">virtual HttpAppFramework &amp; disableSigtermHandling()=0</div><div class="ttdoc">Disable the handling of SIGTERM signal.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad1d815db1929a04af4231ccdab63142e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad1d815db1929a04af4231ccdab63142e">drogon::HttpAppFramework::enableDateHeader</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableDateHeader(bool flag)=0</div><div class="ttdoc">Control if the 'Date' header is added to each HTTP response.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4">drogon::HttpAppFramework::registerSyncAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerSyncAdvice(const std::function&lt; HttpResponsePtr(const HttpRequestPtr &amp;)&gt; &amp;advice)=0</div><div class="ttdoc">Register a synchronous advice</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad8b119392d525e5825906ff254cb1cc7"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad8b119392d525e5825906ff254cb1cc7">drogon::HttpAppFramework::forward</a></div><div class="ttdeci">virtual void forward(const HttpRequestPtr &amp;req, std::function&lt; void(const HttpResponsePtr &amp;)&gt; &amp;&amp;callback, const std::string &amp;hostString=&quot;&quot;, double timeout=0)=0</div><div class="ttdoc">Forward the http request</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad8d263e25fd3093a2991375043e8885d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad8d263e25fd3093a2991375043e8885d">drogon::HttpAppFramework::setIntSignalHandler</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setIntSignalHandler(const std::function&lt; void()&gt; &amp;handler)=0</div><div class="ttdoc">Set the INT Signal Handler. This method provides a way to users for exiting program gracefully....</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_adc6e26bbb45d1b14784d97d00e949ee9"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#adc6e26bbb45d1b14784d97d00e949ee9">drogon::HttpAppFramework::setImplicitPage</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setImplicitPage(const std::string &amp;implicitPageFile)=0</div><div class="ttdoc">Set the page which would the server load in if it detects that the user requested a directory</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_add0bde17d0a16461a43cee523030e453"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#add0bde17d0a16461a43cee523030e453">drogon::HttpAppFramework::getThreadNum</a></div><div class="ttdeci">virtual size_t getThreadNum() const =0</div><div class="ttdoc">Get the number of threads for IO event loops</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_add1ce3a3afbd29df586bab2a7f540819"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#add1ce3a3afbd29df586bab2a7f540819">drogon::HttpAppFramework::registerWebSocketControllerRegex</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerWebSocketControllerRegex(const std::string &amp;regExp, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints=std::vector&lt; internal::HttpConstraint &gt;{})=0</div><div class="ttdoc">Register a WebSocketController into the framework.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ade1a5ac01daf0fa3e0ca3ac61d71761b"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ade1a5ac01daf0fa3e0ca3ac61d71761b">drogon::HttpAppFramework::setDefaultHandler</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setDefaultHandler(DefaultHandler handler)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_adf018700c57a6ca14d2c8ea811c25932"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#adf018700c57a6ca14d2c8ea811c25932">drogon::HttpAppFramework::enableGzip</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableGzip(bool useGzip)=0</div><div class="ttdoc">Enable gzip compression.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae04fc03f2dffd836c0def92074397713"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae04fc03f2dffd836c0def92074397713">drogon::HttpAppFramework::loadConfigJson</a></div><div class="ttdeci">virtual HttpAppFramework &amp; loadConfigJson(Json::Value &amp;&amp;data) noexcept(false)=0</div><div class="ttdoc">Load the configuration from a Json::Value Object.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae149b3238aa0ab3b4be2e050f77769f0"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae149b3238aa0ab3b4be2e050f77769f0">drogon::HttpAppFramework::getSharedPlugin</a></div><div class="ttdeci">std::shared_ptr&lt; T &gt; getSharedPlugin()</div><div class="ttdoc">Get the shared_ptr plugin object registered in the framework</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:238</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae1cecfdedaef7e39556a396aaf2a1ab5"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae1cecfdedaef7e39556a396aaf2a1ab5">drogon::HttpAppFramework::getPlugin</a></div><div class="ttdeci">T * getPlugin()</div><div class="ttdoc">Get the plugin object registered in the framework</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:219</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae1fb314a643797c3c838129ea1052c2a"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae1fb314a643797c3c838129ea1052c2a">drogon::HttpAppFramework::setKeepaliveRequestsNumber</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setKeepaliveRequestsNumber(const size_t number)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae651c9500e50cb91495e09f39de0b124"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae651c9500e50cb91495e09f39de0b124">drogon::HttpAppFramework::addListener</a></div><div class="ttdeci">virtual HttpAppFramework &amp; addListener(const std::string &amp;ip, uint16_t port, bool useSSL=false, const std::string &amp;certFile=&quot;&quot;, const std::string &amp;keyFile=&quot;&quot;, bool useOldTLS=false, const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;sslConfCmds={})=0</div><div class="ttdoc">Add a listener for http or https service</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae7334018c6f5ab8c4c25b88744d3946d"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae7334018c6f5ab8c4c25b88744d3946d">drogon::HttpAppFramework::setSSLFiles</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setSSLFiles(const std::string &amp;certPath, const std::string &amp;keyPath)=0</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ae969ce5c4165fe3472ca4da6c9232dcc"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ae969ce5c4165fe3472ca4da6c9232dcc">drogon::HttpAppFramework::setIdleConnectionTimeout</a></div><div class="ttdeci">HttpAppFramework &amp; setIdleConnectionTimeout(const std::chrono::duration&lt; double &gt; &amp;timeout)</div><div class="ttdoc">A wrapper of the above method.</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:1196</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aee1c93381197890e0cbac1d0a9837c86"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aee1c93381197890e0cbac1d0a9837c86">drogon::HttpAppFramework::getHomePage</a></div><div class="ttdeci">virtual const std::string &amp; getHomePage() const =0</div><div class="ttdoc">Get homepage, default is &quot;index.html&quot;</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_af1a661c03db7e0ef419e22277246d2e5"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#af1a661c03db7e0ef419e22277246d2e5">drogon::HttpAppFramework::loadConfigFile</a></div><div class="ttdeci">virtual HttpAppFramework &amp; loadConfigFile(const std::string &amp;fileName) noexcept(false)=0</div><div class="ttdoc">Load the configuration file with json format.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_af7d1dc6bc5a94bf47c5a4a843235273e"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#af7d1dc6bc5a94bf47c5a4a843235273e">drogon::HttpAppFramework::addALocation</a></div><div class="ttdeci">virtual HttpAppFramework &amp; addALocation(const std::string &amp;uriPrefix, const std::string &amp;defaultContentType=&quot;&quot;, const std::string &amp;alias=&quot;&quot;, bool isCaseSensitive=false, bool allowAll=true, bool isRecursive=true, const std::vector&lt; std::string &gt; &amp;middlewareNames={})=0</div><div class="ttdoc">Add a location of static files for GET requests.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_af82887957c3f04200ac23d7f8add9128"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#af82887957c3f04200ac23d7f8add9128">drogon::HttpAppFramework::getLoop</a></div><div class="ttdeci">virtual trantor::EventLoop * getLoop() const =0</div><div class="ttdoc">Get the main event loop of the framework;</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_af8bd65eb1d14e830a06fcbda24815dcd"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#af8bd65eb1d14e830a06fcbda24815dcd">drogon::HttpAppFramework::registerBeginningAdvice</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerBeginningAdvice(const std::function&lt; void()&gt; &amp;advice)=0</div><div class="ttdoc">Register a beginning advice</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_afa6c803364316d97d80ec34e19cc69a0"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#afa6c803364316d97d80ec34e19cc69a0">drogon::HttpAppFramework::~HttpAppFramework</a></div><div class="ttdeci">virtual ~HttpAppFramework()=default</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_afabfa25facbbc3f76345cfdf234ccc3b"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#afabfa25facbbc3f76345cfdf234ccc3b">drogon::HttpAppFramework::setStaticFileHeaders</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setStaticFileHeaders(const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;headers)=0</div><div class="ttdoc">Set the Static File Headers</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_afc2d00126e0d4faaf3fac7a07c0d2d4a"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#afc2d00126e0d4faaf3fac7a07c0d2d4a">drogon::HttpAppFramework::isGzipEnabled</a></div><div class="ttdeci">virtual bool isGzipEnabled() const =0</div><div class="ttdoc">Return true if gzip is enabled.</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpControllerBase_html"><div class="ttname"><a href="classdrogon_1_1HttpControllerBase.html">drogon::HttpControllerBase</a></div><div class="ttdoc">The base class for HTTP controllers.</div><div class="ttdef"><b>Definition</b> HttpController.h:48</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpSimpleControllerBase_html"><div class="ttname"><a href="classdrogon_1_1HttpSimpleControllerBase.html">drogon::HttpSimpleControllerBase</a></div><div class="ttdoc">The abstract base class for HTTP simple controllers.</div><div class="ttdef"><b>Definition</b> HttpSimpleController.h:37</div></div>
<div class="ttc" id="aclassdrogon_1_1WebSocketControllerBase_html"><div class="ttname"><a href="classdrogon_1_1WebSocketControllerBase.html">drogon::WebSocketControllerBase</a></div><div class="ttdoc">The abstract base class for WebSocket controllers.</div><div class="ttdef"><b>Definition</b> WebSocketController.h:42</div></div>
<div class="ttc" id="adrogon__callbacks_8h_html"><div class="ttname"><a href="drogon__callbacks_8h.html">drogon_callbacks.h</a></div></div>
<div class="ttc" id="aexports_8h_html"><div class="ttname"><a href="exports_8h.html">exports.h</a></div></div>
<div class="ttc" id="aexports_8h_html_a00d0a001c2dd03906272e00b0598182e"><div class="ttname"><a href="exports_8h.html#a00d0a001c2dd03906272e00b0598182e">DROGON_EXPORT</a></div><div class="ttdeci">#define DROGON_EXPORT</div><div class="ttdef"><b>Definition</b> exports.h:15</div></div>
<div class="ttc" id="anamespacedrogon_1_1internal_html_a05ac521c8734eacff04441e10c4caa2a"><div class="ttname"><a href="namespacedrogon_1_1internal.html#a05ac521c8734eacff04441e10c4caa2a">drogon::internal::HttpBinderBasePtr</a></div><div class="ttdeci">std::shared_ptr&lt; HttpBinderBase &gt; HttpBinderBasePtr</div><div class="ttdef"><b>Definition</b> HttpBinder.h:190</div></div>
<div class="ttc" id="anamespacedrogon_html"><div class="ttname"><a href="namespacedrogon.html">drogon</a></div><div class="ttdoc">Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...</div><div class="ttdef"><b>Definition</b> Attribute.h:23</div></div>
<div class="ttc" id="anamespacedrogon_html_a0be61eeb45a4c229be4041cd60d0d906"><div class="ttname"><a href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">drogon::app</a></div><div class="ttdeci">HttpAppFramework &amp; app()</div><div class="ttdoc">A wrapper of the instance() method</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:1656</div></div>
<div class="ttc" id="anamespacedrogon_html_a32156d4371a4c378893f8c3a7f2b54c3"><div class="ttname"><a href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">drogon::AdviceChainCallback</a></div><div class="ttdeci">std::function&lt; void()&gt; AdviceChainCallback</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:28</div></div>
<div class="ttc" id="anamespacedrogon_html_a401611ee31e9c20e3114471db14cfb52"><div class="ttname"><a href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">drogon::ExceptionHandler</a></div><div class="ttdeci">std::function&lt; void(const std::exception &amp;, const HttpRequestPtr &amp;, std::function&lt; void(const HttpResponsePtr &amp;)&gt; &amp;&amp;)&gt; ExceptionHandler</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:76</div></div>
<div class="ttc" id="anamespacedrogon_html_a4a6e4ad19b218191e589e6e665442c82"><div class="ttname"><a href="namespacedrogon.html#a4a6e4ad19b218191e589e6e665442c82">drogon::AdviceDestroySessionCallback</a></div><div class="ttdeci">std::function&lt; void(const std::string &amp;)&gt; AdviceDestroySessionCallback</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:30</div></div>
<div class="ttc" id="anamespacedrogon_html_a4e9a968fbdc3aa357cefc8aca7e99642"><div class="ttname"><a href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642">drogon::HttpMethod</a></div><div class="ttdeci">HttpMethod</div><div class="ttdef"><b>Definition</b> HttpTypes.h:190</div></div>
<div class="ttc" id="anamespacedrogon_html_a5200699555f98a809538342baa167aad"><div class="ttname"><a href="namespacedrogon.html#a5200699555f98a809538342baa167aad">drogon::HttpRequestPtr</a></div><div class="ttdeci">std::shared_ptr&lt; HttpRequest &gt; HttpRequestPtr</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:26</div></div>
<div class="ttc" id="anamespacedrogon_html_a537d4ab1b522ccee2c3377c4d8ea4a2e"><div class="ttname"><a href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">drogon::AdviceCallback</a></div><div class="ttdeci">std::function&lt; void(const HttpResponsePtr &amp;)&gt; AdviceCallback</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:27</div></div>
<div class="ttc" id="anamespacedrogon_html_a6230a342ffa91efaf6e21f872158a1d4"><div class="ttname"><a href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">drogon::DefaultHandler</a></div><div class="ttdeci">std::function&lt; void(const HttpRequestPtr &amp;, std::function&lt; void(const HttpResponsePtr &amp;)&gt; &amp;&amp;)&gt; DefaultHandler</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:79</div></div>
<div class="ttc" id="anamespacedrogon_html_a708ae7b30d3ff085747eff94d16ce572"><div class="ttname"><a href="namespacedrogon.html#a708ae7b30d3ff085747eff94d16ce572">drogon::getVersion</a></div><div class="ttdeci">DROGON_EXPORT std::string getVersion()</div></div>
<div class="ttc" id="anamespacedrogon_html_a78af765d8853619efb4051f2ac281083"><div class="ttname"><a href="namespacedrogon.html#a78af765d8853619efb4051f2ac281083">drogon::banner</a></div><div class="ttdeci">const char banner[]</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:59</div></div>
<div class="ttc" id="anamespacedrogon_html_a7d7b482287e81a3b7d94a203b5d54b43"><div class="ttname"><a href="namespacedrogon.html#a7d7b482287e81a3b7d94a203b5d54b43">drogon::AdviceStartSessionCallback</a></div><div class="ttdeci">std::function&lt; void(const std::string &amp;)&gt; AdviceStartSessionCallback</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:29</div></div>
<div class="ttc" id="anamespacedrogon_html_ab2a2d829bb017f43c2c9de72f4042baa"><div class="ttname"><a href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">drogon::HttpResponsePtr</a></div><div class="ttdeci">std::shared_ptr&lt; HttpResponse &gt; HttpResponsePtr</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:24</div></div>
<div class="ttc" id="anamespacedrogon_html_ac65852c981ca5bcf94811a26881bbc00"><div class="ttname"><a href="namespacedrogon.html#ac65852c981ca5bcf94811a26881bbc00">drogon::HttpHandlerInfo</a></div><div class="ttdeci">std::tuple&lt; std::string, HttpMethod, std::string &gt; HttpHandlerInfo</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:80</div></div>
<div class="ttc" id="anamespacedrogon_html_ad6cc6b2c3917537432fcde077e02cf2f"><div class="ttname"><a href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">drogon::HttpStatusCode</a></div><div class="ttdeci">HttpStatusCode</div><div class="ttdef"><b>Definition</b> HttpTypes.h:25</div></div>
<div class="ttc" id="anamespacedrogon_html_ae4905bf6e3e832d66d9ee8b054204bd8"><div class="ttname"><a href="namespacedrogon.html#ae4905bf6e3e832d66d9ee8b054204bd8">drogon::getGitCommit</a></div><div class="ttdeci">DROGON_EXPORT std::string getGitCommit()</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>
